<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <meta http-equiv="X-UA-Compatible" content="IE=edge">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>Document</title>
</head>
<body>
    <script>
        // 1.预解析
        // console.log(num)
        // var num = 100
        // console.log(num)

        // 定义之前使用let声明的变量会报错
        // console.log(num2)
        // let num2 = 200
        // console.log(num2)

        // 定义之前使用const声明的变量会报错
        // console.log(num3)
        // const num3 = 300
        // console.log(num3)


        // 2.重复变量名
        // var n1 = 100
        // var n1 = 200
        // console.log(n1)

        // let n2 = 100
        // let n2 = 200

        // const n3 = 100
        // const n3 = 200


        // 3.块级作用域
        // 任何一个可以执行代码代码段的 {} 都会限制该变量的适用范围
        // if(true){
        //     var num = 100
        //     console.log(num)
        // }
        // console.log(num)

        // if(true){
        //     // 因为这个 num 使用 let 关键字定义的
        //     // 所以只能在这个 if 的 {} 内使用
        //     let num = 100
        //     console.log(num)
        // }
        // console.log(num)

        // if(true){
        //     // 因为这个 num 使用 const 关键字定义的
        //     // 所以只能在这个 if 的 {} 内使用
        //     const num = 100
        //     console.log(num)
        // }
        // console.log(num)


        // 4.定义时不赋值(let声明时可以不赋值，const必须赋值)
        // let num
        // console.log(num)
        // num = 100
        // console.log(num)

        // const num
        // console.log(num)
        // num = 100
        // console.log(num)

        // 5.修改(let定义变量可以修改，const定义常量不能修改)
        // let num = 100
        // console.log(num)
        // num = 200
        // console.log(num)

        const num = 100
        console.log(num)
        num = 200
        console.log(num)
    </script>
</body>
</html>